package com.wzu.servlet;

import com.wzu.pojo.User;
import com.wzu.service.UserService;
import com.wzu.service.UserServiceImpl;
import com.wzu.pojo.Reader;
import com.wzu.service.ReaderService;
import com.wzu.service.ReaderServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

// 登录Servlet，处理用户登录请求
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    // 用户服务，用于执行登录验证
    private UserService userService = new UserServiceImpl();

    /**
     * 处理POST请求的登录操作
     * 
     * @param request  包含登录信息的HTTP请求对象
     * @param response 用于发送响应的HTTP响应对象
     * @throws ServletException 如果Servlet遇到异常
     * @throws IOException      如果发生输入或输出异常
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求和响应的字符编码，确保文本处理的准确性
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        // 获取响应输出流，用于向客户端发送信息
        PrintWriter out = response.getWriter();

        // 获取用户名和密码参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 检查用户名和密码是否为空
        if (username == null || username.isEmpty() || password == null || password.isEmpty()) {
            out.print("请输入完整的账号和密码");
            return;
        }

        // 调用用户服务执行登录验证
        User user = userService.login(username, password);
        if (user != null) {
            // 登录成功，创建会话并存储用户信息
            HttpSession session = request.getSession();
            session.setAttribute("user", user);

            // 检查 reader 表中是否存在该用户的 reader 信息
            ReaderService readerService = new ReaderServiceImpl();
            Reader reader = readerService.getReaderByUserId(user.getUser_id());

            if (reader == null) {
                // 如果 reader 不存在，则创建一个默认记录
                Reader newReader = new Reader();
                newReader.setReader_id(user.getUser_id()); // 与 user 一一对应
                newReader.setName(user.getUsername());     // 默认用用户名
                newReader.setGender("未知");
                newReader.setAge(0);
                newReader.setContact_info("");
                newReader.setId_type("身份证");
                newReader.setId_number("");
                newReader.setBorrow_limit(5);
                newReader.setBorrow_period(30);
                newReader.setCan_renew(true);

                readerService.addReader(newReader);  // 你需要实现这个方法
                // 重新赋值给 reader
                reader = readerService.getReaderByUserId(user.getUser_id());
            }
            out.print("登录成功");
            session.setAttribute("reader", reader);
        } else {
            // 登录失败，提示错误信息
            out.print("账号或密码错误");
        }
    }
}
